/**
 * 用户信息安全访问工具使用示例
 * 展示如何在组件中安全地访问用户信息
 */

import { createUserAccessor, getSafeUserId, isUserLoggedIn } from './user-safety.js'
import { useUserStore } from '@/store/user/index.js'

// 示例1: 在Vue组件中使用
export function exampleInVueComponent() {
  const userStore = useUserStore()
  
  // 方法1: 使用安全函数
  const userId = getSafeUserId(userStore)
  const isLoggedIn = isUserLoggedIn(userStore)
  
  // 方法2: 使用访问器对象
  const userAccessor = createUserAccessor(userStore)
  
  // 安全访问用户属性
  const userLevel = userAccessor.getProperty('level', 0)
  const userAddress = userAccessor.getProperty('address', '')
  
  // 安全执行需要用户登录的操作
  userAccessor.execute((user) => {
    console.log('User is logged in:', user.userId)
    // 执行需要用户信息的操作
  }, 'user operation')
  
  return {
    userId,
    isLoggedIn,
    userLevel,
    userAddress
  }
}

// 示例2: 在API调用中使用
export async function exampleApiCall() {
  const userStore = useUserStore()
  
  // 检查用户是否已登录
  if (!isUserLoggedIn(userStore)) {
    console.warn('User not logged in, cannot make API call')
    return null
  }
  
  const userId = getSafeUserId(userStore)
  if (!userId) {
    console.error('Unable to get user ID')
    return null
  }
  
  try {
    // 使用安全的userId进行API调用
    const response = await fetch(`/api/user/${userId}`)
    return await response.json()
  } catch (error) {
    console.error('API call failed:', error)
    return null
  }
}

// 示例3: 在事件处理中使用
export function exampleEventHandler(event) {
  const userStore = useUserStore()
  
  // 检查事件数据是否完整
  if (!event?.detail?.user) {
    console.warn('Invalid event data')
    return
  }
  
  // 安全访问用户信息
  const userAccessor = createUserAccessor(userStore)
  
  if (userAccessor.isLoggedIn) {
    // 执行需要用户登录的操作
    console.log('Processing event for user:', userAccessor.userId)
  } else {
    console.warn('User not logged in, skipping event processing')
  }
}
